/*
 * Copyright 2011 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package me.zachwhaley.android.ui;

import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.view.ActionProvider;
import android.view.ContextMenu;
import android.view.MenuItem;
import android.view.SubMenu;
import android.view.View;

/**
 * A <em>really</em> dumb implementation of the {@link android.view.MenuItem} interface, that's only
 * useful for our actionbar-compat purposes. See
 * <code>com.android.internal.view.menu.MenuItemImpl</code> in AOSP for a more complete
 * implementation.
 */
public class SimpleMenuItem implements MenuItem 
{

	private SimpleMenu menu;

	private final int id;
	private final int order;
	private CharSequence title;
	private CharSequence titleCondensed;
	private Drawable iconDrawable;
	private int iconResId = 0;
	private boolean enabled = true;

	public SimpleMenuItem(SimpleMenu menu, int id, int order, CharSequence title)
	{
		this.menu = menu;
		this.id = id;
		this.order = order;
		this.title = title;
	}

	public int getItemId() 
	{
		return id;
	}

	public int getOrder() 
	{
		return order;
	}

	public MenuItem setTitle(CharSequence title) 
	{
		this.title = title;
		return this;
	}

	public MenuItem setTitle(int titleRes)
	{
		return setTitle(menu.getContext().getString(titleRes));
	}

	public CharSequence getTitle() 
	{
		return title;
	}

	public MenuItem setTitleCondensed(CharSequence title)
	{
		titleCondensed = title;
		return this;
	}

	public CharSequence getTitleCondensed() 
	{
		return titleCondensed != null ? titleCondensed : title;
	}

	public MenuItem setIcon(Drawable icon)
	{
		iconResId = 0;
		iconDrawable = icon;
		return this;
	}

	public MenuItem setIcon(int iconResId)
	{
		iconDrawable = null;
		this.iconResId = iconResId;
		return this;
	}

	public Drawable getIcon()
	{
		if (iconDrawable != null)
		{
			return iconDrawable;
		}

		if (iconResId != 0)
		{
			return menu.getResources().getDrawable(iconResId);
		}

		return null;
	}

	public MenuItem setEnabled(boolean enabled)
	{
		this.enabled = enabled;
		return this;
	}

	public boolean isEnabled() 
	{
		return enabled;
	}

	// No-op operations. We use no-ops to allow inflation from menu XML.

	public int getGroupId()
	{
		// Noop
		return 0;
	}

	public View getActionView() 
	{
		// Noop
		return null;
	}

	public MenuItem setActionProvider(ActionProvider actionProvider) 
	{
		// Noop
		return this;
	}

	public ActionProvider getActionProvider()
	{
		// Noop
		return null;
	}
	
	public boolean expandActionView()
	{
		// Noop
		return false;
	}

	public boolean collapseActionView() 
	{
		// Noop
		return false;
	}

	
	public boolean isActionViewExpanded() 
	
	{
		// Noop
		return false;
	}

	
	public MenuItem setOnActionExpandListener(OnActionExpandListener arg0)
	{
		// TODO Auto-generated method stub
		return null;
	}
	
	public MenuItem setIntent(Intent intent)
	{
		// Noop
		return this;
	}
	
	public Intent getIntent()
	{
		// Noop
		return null;
	}
	
	public MenuItem setShortcut(char c, char c1)
	{
		// Noop
		return this;
	}
	
	public MenuItem setNumericShortcut(char c)
	{
		// Noop
		return this;
	}
	
	public char getNumericShortcut()
	{
		// Noop
		return 0;
	}
	
	public MenuItem setAlphabeticShortcut(char c)
	{
		// Noop
		return this;
	}
	
	public char getAlphabeticShortcut()
	{
		// Noop
		return 0;
	}
	
	public MenuItem setCheckable(boolean b)
	{
		// Noop
		return this;
	}
	
	public boolean isCheckable() 
	{
		// Noop
		return false;
	}
	
	public MenuItem setChecked(boolean b)
	{
		// Noop
		return this;
	}
	
	public boolean isChecked() 
	{
		// Noop
		return false;
	}
	
	public MenuItem setVisible(boolean b)
	{
		// Noop
		return this;
	}
	
	public boolean isVisible() 
	{
		// Noop
		return true;
	}
	
	public boolean hasSubMenu()
	{
		// Noop
		return false;
	}
	
	public SubMenu getSubMenu()
	{
		// Noop
		return null;
	}
	
	public MenuItem setOnMenuItemClickListener(OnMenuItemClickListener onMenuItemClickListener) 
	{
		// Noop
		return this;
	}
	
	public ContextMenu.ContextMenuInfo getMenuInfo() 
	{
		// Noop
		return null;
	}
	
	public void setShowAsAction(int i) 
	{
		// Noop
	}

	public MenuItem setShowAsActionFlags(int i)
	{
		// Noop
		return null;
	}
	
	public MenuItem setActionView(View view)
	{
		// Noop
		return this;
	}

	public MenuItem setActionView(int i)
	{
		// Noop
		return this;
	}


}
